package com.hex.ds.hdrs.period.job.po;

import com.hex.ds.hdrs.common.helper.ListHelper;
import com.hex.ds.hdrs.period.task.po.PeriodTaskDef;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Data
public class JobTaskDef {

    /**
     * 作业定义信息
     */
    private PeriodJobDef periodJobDef;

    /**
     * 任务定义list
     */
    private List<PeriodTaskDef> periodTaskDefs = new ArrayList<>();

    /**
     * 按依赖顺序排序 List<taskCode>
     */
    private List<String> sortTaskList = new ArrayList<>();

    /**
     * 作业下的任务依赖关系发生改变：true
     */
    private boolean isChange;

    /**
     * 添加任务
     *
     * @param taskDef
     */
    public void addTaskDef(PeriodTaskDef taskDef) {
        this.periodTaskDefs.add(taskDef);
    }

    /**
     * 添加任务在作业中
     *
     * @param taskList
     */
    public void addJobSortTaskList(List<String> taskList) {
        this.sortTaskList = taskList;
    }


    /**
     * 删除作业下的任务
     *
     * @param delTaskCode
     */
    public void delJobSortTask(String delTaskCode) {
        this.sortTaskList.remove(delTaskCode);
    }

    /**
     * 删除任务
     *
     * @param taskDef
     */
    public void delTaskDef(PeriodTaskDef taskDef) {
        periodTaskDefs.remove(taskDef);
    }

    /**
     * @Method: getTaskDef <br>
     * @Param: [] <br>
     * @Return: java.util.List<com.hex.ds.hdrs.period.task.po.PeriodTaskDef> <br>
     * @Description：获取任务集合<br>
     * @Author： gc.zuo<br>
     * @Date： 2022/8/11 19:05 <br>
     * @Version： V1.0<br>
     */
    public List<PeriodTaskDef> getTaskDef() {
        return periodTaskDefs;
    }

    /**
     * 获取作业编码
     */
    public String getJobCode() {
        return this.periodJobDef.getJobCode();
    }

    /**
     * 通过任务号获取  上游作业
     *
     * @param taskDef
     * @return
     */
    public List<String> getUpJob(PeriodTaskDef taskDef) {
        log.debug("通过任务号获取  上游作业【JobTaskDef.getUpJob】");
        String upJobDefs = taskDef.getDependJob();
        List<String> upJobDefList = ListHelper.getList(upJobDefs);
        return upJobDefList;
    }

    /**
     * 通过任务号获取 上游任务
     *
     * @param taskDef
     * @return
     */
    public List<String> getUpTask(PeriodTaskDef taskDef) {
        log.debug("通过任务号获取 上游任务【JobTaskDef.getUpTask】");
        String upTaskDefs = taskDef.getDependTask();
        List<String> upTaskDefList = ListHelper.getList(upTaskDefs);
        return upTaskDefList;
    }

    /**
     * 获取下一个任务
     *
     * @param curTask
     * @return
     */
    public String getNextTaskCode(String curTask) {
        int curIndex = sortTaskList.indexOf(curTask);
        return curIndex == sortTaskList.size() - 1 ? "" : sortTaskList.get(curIndex + 1);
    }

}
